package br.com.avaliacao.controllers;

import br.com.avaliacao.model.dao.AvaliacaoDAO;
import br.com.avaliacao.model.dao.CRUD;
import br.com.avaliacao.model.dao.ColaboradorDAO;
import br.com.avaliacao.model.dao.CriterioDAO;
import br.com.avaliacao.model.dao.ItemAvaliacaoDAO;
import br.com.avaliacao.model.entities.Avaliacao;
import br.com.avaliacao.model.entities.Colaborador;
import br.com.avaliacao.model.entities.Criterio;
import br.com.avaliacao.model.entities.ItemAvaliacao;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

@ManagedBean(name = "avaliacaoBean")
@SessionScoped
public class AvaliacaoController implements Serializable {

    private DataModel lista;

    private Avaliacao avaliacao;
    private Colaborador colaborador;
    private List<ItemAvaliacao> itensAvaliacao;

    public AvaliacaoController() {
        this.avaliacao = new Avaliacao();
        this.colaborador = new Colaborador();
        this.itensAvaliacao = new ArrayList<ItemAvaliacao>();
    }
    
    private void resetAtributos(){
        this.avaliacao = new Avaliacao();
        this.colaborador = new Colaborador();
        this.itensAvaliacao = new ArrayList<ItemAvaliacao>();
    }

    public DataModel getListaAvaliacao() {
        List<Avaliacao> a;
        try {
            a = new AvaliacaoDAO().retLista(this.colaborador.getId());
        } catch (NullPointerException e) {
            a = new AvaliacaoDAO().retLista();
        }

        lista = new ListDataModel(a);
        return lista;
    }

    public String save() {
        AvaliacaoDAO aDao = new AvaliacaoDAO();
        ItemAvaliacaoDAO iDao = new ItemAvaliacaoDAO();

        if (this.avaliacao.getId() > 0) {
            aDao.atualizar(avaliacao);
            for (ItemAvaliacao item : itensAvaliacao) {
                item.setIdAvaliacao(this.avaliacao.getId());
                System.out.println(item.getId());
                System.out.println(item.getIdAvaliacao());
                System.out.println(item.getIdCriterio());
                System.out.println(item.getValor());
                iDao.atualizar(item);
            }
        } else {
            aDao.inserir(avaliacao);
            for (ItemAvaliacao item : itensAvaliacao) {
                item.setIdAvaliacao(this.avaliacao.getId());
                iDao.inserir(item);
            }
        }
        return "index?faces-redirect=true";
    }

    public String excluir() {
        Avaliacao avaliacaoTemp = (Avaliacao) lista.getRowData();
        AvaliacaoDAO dao = new AvaliacaoDAO();
        dao.excluir(avaliacaoTemp);
        return "index";
    }

    public String prepararAdicionarAvaliacao(Colaborador c) {
        this.resetAtributos();
        this.colaborador = c;
        
        avaliacao = new Avaliacao();
        avaliacao.setIdColaborador(c.getId());

        CriterioDAO cDao = new CriterioDAO();
        List<Criterio> criterios = cDao.retLista();
        for (Criterio criterio : criterios) {
            ItemAvaliacao item = new ItemAvaliacao();
            item.setIdCriterio(criterio.getId());
            this.itensAvaliacao.add(item);
        }

        return "avaliacao";
    }

    public String prepararAlterarAvaliacao() {
        this.resetAtributos();
        
        this.avaliacao = (Avaliacao) lista.getRowData();

        AvaliacaoDAO aDao = new AvaliacaoDAO();
        this.avaliacao = aDao.consultar(this.avaliacao.getId());

        ColaboradorDAO cDao = new ColaboradorDAO();
        this.colaborador = cDao.consultar(this.avaliacao.getIdColaborador());

        ItemAvaliacaoDAO iDao = new ItemAvaliacaoDAO();
        List<ItemAvaliacao> itens = iDao.retLista(this.avaliacao.getId());
        for (ItemAvaliacao item : itens) {
            this.itensAvaliacao.add(item);
        }

        return "avaliacao";
    }

    public String prepararVisualizarAvaliacao(Colaborador c) {
        this.resetAtributos();
        this.colaborador = c;

        return "listaAvaliacoes";
    }

    //GETTERS E SETTERS
    public Avaliacao getAvaliacao() {
        return avaliacao;
    }

    public void setAvaliacao(Avaliacao a) {
        this.avaliacao = a;
    }

    public Colaborador getColaborador() {
        return colaborador;
    }

    public void setColaborador(Colaborador colaborador) {
        this.colaborador = colaborador;
    }

    public List<ItemAvaliacao> getItemAvaliacao() {
        return itensAvaliacao;
    }

    public void setItemAvaliacao(List<ItemAvaliacao> itemAvaliacao) {
        this.itensAvaliacao = itemAvaliacao;
    }
}
